//
//  WXStatusListViewModel.swift
//  WXWeiBo
//
//  Created by Angel-xin on 2016/09/23.
//  Copyright © 2016年 Angel-xin. All rights reserved.
//

import UIKit
import SDWebImage

// 封装首页微博数据网络请求 -> 首页的 TableView
class WXStatusListViewModel: NSObject {
    
    // 关注用户的微博数据源
    lazy var statusList: [WXStatusViewModel] = [WXStatusViewModel]()
    
    // 加载首页微博数据
    //    func loadData(callBack: @escaping (Bool)->()) {
    // isPullup 是否上拉加载
    func loadData(isPullup: Bool, callBack: @escaping (Bool, String)->()) {
        
        
        let accessToken = WXUserAccountViewModel.sharedUserAccountViewModel.accessToken!
        
        // 获取上拉加载请求需要的微博id
        var maxID: Int64 = 0
        
        // 获取下拉属性请求需要的微博id
        var sinceId: Int64 = 0
        
        if isPullup {
            // 上拉加载
            maxID = statusList.last?.status?.id ?? 0
            if maxID > 0 {
                maxID -= 1
            }
        } else {
            // 下拉刷新
            sinceId = statusList.first?.status?.id ?? 0
        }
        
        // 检测本地是否有缓存数据
        //        let localArray = WXStatusDAL.checkCacheData(maxId: maxID, sinceId: sinceId)
        //        print(localArray)
        
        var message: String = "没有加载到最新微博数据"
        WXStatusDAL.loadData(accessToken: accessToken, maxId: maxID, sinceId: sinceId) { (statusArray) in
            
//        WXNetworkingTools.sharedTools.requestStatuses(accessToken: accessToken, maxID: maxID, sinceId: sinceId) { (response, error) in
//            if error != nil {
//                print("网络请求异常: \(error)")
//                callBack(false, message)
//                return
//            }
//            
//            
//            // 代码执行到此表示网络请求成功
//            //            print(response)
//            
//            guard let dic = response as? [String: Any] else {
//                print("你不是一个正确的字典格式")
//                callBack(false, message)
//                return
//            }
//            
//            guard let statusArray = dic["statuses"] as? [[String: Any]] else {
//                print("你不是一个正确的字典格式")
//                callBack(false, message)
//                return
//            }
//            
//            // 缓存新浪微博数据
//            WXStatusDAL.cacheData(statusDicArray: statusArray)
            
            // 使用yymodel进行数组字典转成数组模型
            let statusArr = NSArray.yy_modelArray(with: WXStatus.self, json: statusArray) as! [WXStatus]
            
            var tempArray = [WXStatusViewModel]()
            
            let group = DispatchGroup()
            
            // 遍历模型数组
            for status in statusArr {
                let viewModel = WXStatusViewModel(status: status)
                //viewModel.status = status
                tempArray.append(viewModel)
                
                // 判断是否有单张图片
                if status.pic_urls?.count == 1 {
                    // 原创微博配图等于1张,需要下载
                    if let url = status.pic_urls?.first?.thumbnail_pic {
                        // 在调度组中执行任务
                        //                        DispatchQueue.global().async(group: group, qos: DispatchQoS.default, flags: [], execute: {
                        //                            SDWebImageManager.shared().downloadImage(with: URL(string: url), options: [], progress: nil, completed: { (image, error, _, _, url) in
                        //                                print("原创单张配图下载完成: \(url)")
                        //                            })
                        //                        })
                        group.enter()
                        SDWebImageManager.shared().downloadImage(with: URL(string: url), options: [], progress: nil, completed: { (image, error, _, _, url) in
                            print("原创单张配图下载完成: \(url)")
                            group.leave()
                        })
                    }
                }
                
                if status.retweeted_status?.pic_urls?.count == 1 {
                    // 转发微博配图等于1张,需要下载
                    if let url = status.retweeted_status?.pic_urls?.first?.thumbnail_pic {
                        // 在调度组中执行任务
                        //                        DispatchQueue.global().async(group: group, qos: DispatchQoS.default, flags: [], execute: {
                        //                            SDWebImageManager.shared().downloadImage(with: URL(string: url), options: [], progress: nil, completed: { (image, error, _, _, url) in
                        //                                print("转发单张配图下载完成: \(url)")
                        //                            })
                        //                        })
                        group.enter()
                        SDWebImageManager.shared().downloadImage(with: URL(string: url), options: [], progress: nil, completed: { (image, error, _, _, url) in
                            print("转发单张配图下载完成: \(url)")
                            group.leave()
                        })
                    }
                }
            }
            
            // 给数据源赋值
            //            self.statusList = tempArray
            if isPullup {
                // 如果上拉加载需要把数据追加到原始数组后面
                self.statusList.append(contentsOf: tempArray)
                
            } else {
                // 下拉刷新
                self.statusList.insert(contentsOf: tempArray, at: 0)
            }
            
            // 判断服务器返回的数据个数是否大于0
            if tempArray.count > 0 {
                message = "加载了\(tempArray.count)条微博数据"
            }
            
            // 把获取到网络数据设置给stausList
            //            self.statusList = statusArr
            
            //self.tableView.reloadData()
            
            group.notify(queue: DispatchQueue.main, execute: {
                // 单张图片数据加载完成进行数据回调(调度组完成之后)
                print("单张下载完成")
                //                DispatchQueue.main.asyncAfter(wallDeadline: DispatchWallTime.now() + 2, execute: {
                callBack(true, message)
                //                })
                
            })
        }
    }
}
